package cn.lcsjsxy.yxc.objectoriented.单例设计模式学习;

/*
* 设计模式
* 定义：设计模式是在大量实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。
*
* 单例设计模式：
* 1.所谓类的单例设计模式，就是采取一定的方法保证再整个软件系统中，对某个类只能存在一个对象实例
*   优点：由于单例模式只生成一个实例，减少了系统性能开销，当一个对象的产生需要比较多的资源时，如读取配置、产生其他依赖对象时，则可以通过在应用启动时直接产生一个单例对象，然后永久驻留内存的方式来解决。
*   应用场景：
*           》网站的计数器
*           》应用程序的日志应用
*           》数据库连接池
*           》项目中，读取配置文件的类
*           》Application
*           》Windows的Recycle Bin（回收站）
*           》Task Manager（任务管理器）
* 2.如何实现？
* 饿汉式 Vs 懒汉式
* 3.区分懒汉式和饿汉式
* 饿汉式：提前创建好对象；
*       坏处：对象加载时间过长
*       好处：饿汉式是线程安全的
* 懒汉式：需要的时候再创建对象；
*       好处：延迟对象的创建
*       目前写法的坏处：线程不安全。————》到多线程内容时，再修改
* */

/**
 * 饿汉式
 */
public class Singleton {
    public static void main(String[] args) {
        Bank bank1=Bank.getInstance();
        Bank bank2=Bank.getInstance();
    }
}

class Bank{
    //1.私有化类的构造器
    private Bank(){

    }

    //2.内部创建类的对象：要求此对象也必须声明为静态的
    private static Bank instance=new Bank();

    //3.提供公共的静态的方法，返回类的对象
    public static Bank getInstance(){
        return instance;
    }
}
